/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Reflection;

import Fachada.persistenciaFachada;
import Interface.iPersistenciaREI;
import fachada.metodosPagoFachada;
import interfaces.iMetodosPago;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import nivelNegocio.NegociosException;
import nivelPersistencia.PersistenciaException;
import objetosNegocio.MetodoPago;
import objetosNegocio.Residente;

/**
 *
 * @author Christian
 */
public class metodosPago {

    private iPersistenciaREI persistencia;
    private String archivoConfig;

    public metodosPago() {
        archivoConfig = "C:/Users/carlos/Documents/NetBeansProjects/Proyecto/MetodosPago.ini";
        persistencia = new persistenciaFachada();
    }

    public int agregarMetodoPagoResidente(MetodoPago m) throws NegociosException {
        try {
            persistencia.turnOn();
            //System.out.println("Subsistema MetodosPago" + m);
            int i = persistencia.agregarMetodoPagoResidente(m);
            //System.out.println("Subsistema MetodosPago" + i);
            persistencia.turnOff();
            return i;
        } catch (PersistenciaException ex) {
            throw new NegociosException(ex.getMessage());
        }

    }
    
    public MetodoPago obtenMetodoPago(Residente residente) throws NegociosException {
        try {
            //System.out.println("Subsistema Metodos: " + residente.getIdResidente());
            persistencia.turnOn();
            MetodoPago m = persistencia.getMetodoPago(residente);
            persistencia.turnOff();
            return m;
        } catch (PersistenciaException ex) {
            throw new NegociosException(ex.getMessage());
        }
    }
    
    public String nombreTipoMetodoPago(Residente residente) throws NegociosException {
        List<String> lista = this.listaMetodosPago();
        for (int i = 0;i<lista.size();i++) {
            if (lista.get(i).contains(residente.getMetodo().getTipoPago())) {
                return lista.get(i).substring(0, lista.get(i).indexOf(":"));
            }
        } return null;
    }

    public List<String> listaMetodosPago() throws NegociosException {
        List<String> lista = new ArrayList<String>();
        try {
            File f = new File(archivoConfig);
            FileReader file = new FileReader(f);
            BufferedReader bf = new BufferedReader(file);
            String r;
            while ((r = bf.readLine()) != null) {
                lista.add(r);
            }
            bf.close();
            file.close();
        } catch (FileNotFoundException msg) {
            throw new NegociosException("No se encuentra el archivo de configuracion \"" + archivoConfig + "\".");
        } catch (IOException msg) {
            throw new NegociosException("Error al leer del archivo de configuracion.");
        }
        return lista;
    }
    
    public void eliminarMetodoPagoResidente(Residente r) throws NegociosException {
        try {
            this.persistencia.turnOn();
            this.persistencia.deleteMetodoPagoResidente(r);
            this.persistencia.turnOff();
        } catch (PersistenciaException ex) {
            throw new NegociosException("Error al borrar el metodo del residente.");
        }
    }
    
    public static void main(String[] args) {
        iMetodosPago m = new metodosPagoFachada();
        try {
            System.out.println(m.listaMetodosPago());
        } catch (NegociosException ex) {
            Logger.getLogger(metodosPago.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
